package com.buaa.util;

import java.util.Set;

public class SymbolUtils {

	/**
	 * 中文标点（支持）
	 * ‘ ’ “ ” ？ ！ ： ；， 。 、 （ ） 【 】 《 》
	 * 
	 * @param symbol
	 */
	public static void addZhSym(Set<Character> symbol) {
		// 是否在全角可见字符当中
		//
		symbol.add('‘');
		symbol.add('’');
		symbol.add('“'); // false
		symbol.add('”'); // false

		symbol.add('？'); // true
		symbol.add('！'); // true
		symbol.add('：'); // true
		symbol.add('；'); // true
		symbol.add('，'); // true
		symbol.add('。'); // false
		symbol.add('·'); // false
		symbol.add('、'); // false

		symbol.add('（'); // true
		symbol.add('）'); // true
		symbol.add('【'); // false
		symbol.add('】'); // false
		symbol.add('《'); // false
		symbol.add('》'); // false
	}

	/**
	 * 英文标点（支持）
	 * \ " ? ! : ; , . ( ) [ ] < >
	 * 
	 * @param symbol
	 */
	public static void addEnSym(Set<Character> symbol) {
		symbol.add('\'');
		symbol.add('"');

		symbol.add('?');
		symbol.add('!');
		symbol.add(':');
		symbol.add(';');
		symbol.add(',');
		symbol.add('.');

		symbol.add('(');
		symbol.add(')');
		symbol.add('[');
		symbol.add(']');
		symbol.add('<');
		symbol.add('>');
	}

	/**
	 * 阿拉伯数字（支持）
	 * 0 1 2 3 4 5 6 7 8 9
	 * 
	 * @param symbol
	 */
	public static void addArabicSym(Set<Character> symbol) {
		for (int i = 48; i < 58; i++) {
			symbol.add((char) i);
		}
	}

	/**
	 * 希腊字母（支持）
	 * α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω
	 * 
	 * @param symbol
	 */
	public static void addGreekSym(Set<Character> symbol) {
		// 'α'-945 'ω'-969 'ς'-962
		for (int i = 945; i <= 969; i++) {
			if (i != 'ς')
				symbol.add((char) i);
		}
		// 'Α'-913 'Ω'-937 '΢'-930
		for (int i = 'Α'; i <= 'Ω'; i++) {
			if (i != '΢')
				symbol.add((char) i);

		}

	}

	/**
	 * 罗马数字（支持）
	 * 
	 */
	public static void addOtherDigitSym(Set<Character> symbol) {
		symbol.add('Ⅰ');
		symbol.add('Ⅱ');
		symbol.add('Ⅲ');
		symbol.add('Ⅳ');
		symbol.add('Ⅴ');
		symbol.add('Ⅵ');
		symbol.add('Ⅶ');
		symbol.add('Ⅷ');
		symbol.add('Ⅸ');
		symbol.add('Ⅹ');
		symbol.add('Ⅺ');
		symbol.add('Ⅻ');

		symbol.add('①');
		symbol.add('②');
		symbol.add('③');
		symbol.add('④');
		symbol.add('⑤');

		symbol.add('⑴');
		symbol.add('⑵');
		symbol.add('⑶');
		symbol.add('⑷');

		// symbol.add('⑹');

	}

	/**
	 * 其他符号（支持）
	 * + - * / % = & | # $ ^ { } 半角空格 
	 * 
	 * @param symbol
	 */
	public static void addOtherSym(Set<Character> symbol) {
		symbol.add('+');
		symbol.add('-');
		symbol.add('*');
		symbol.add('×');
		symbol.add('/');
		symbol.add('%');
		symbol.add('=');
		symbol.add('≧');
		symbol.add('≦');
		symbol.add('≥');
		symbol.add('≤');
		symbol.add('±');

		symbol.add('‰');

		symbol.add('&');
		symbol.add('|');
		symbol.add('@');

		symbol.add('#');
		symbol.add('$');
		symbol.add('^');
		symbol.add('{');
		symbol.add('}');
		symbol.add(' ');
		symbol.add('');
		symbol.add('_');
		symbol.add('~');
		symbol.add('℃');
		symbol.add('°');
		symbol.add('㎡');
		symbol.add('☆');

		// 换行（支持）
		symbol.add('\r');
		symbol.add('\n');

		// Cyrillic西里尔字母
		// ГОСТ Р: 俄罗斯出口标准
		// 更多字符集参考 : http://blog.csdn.net/huangchao064/article/details/53283738
		symbol.add('Г');
		symbol.add('О');
		symbol.add('С');
		symbol.add('Т');
		symbol.add('Р');
	}

	public static void addAllSym(Set<Character> symbol) {
		addZhSym(symbol);
		addEnSym(symbol);
		addArabicSym(symbol);
		addGreekSym(symbol);
		addOtherDigitSym(symbol);
		addOtherSym(symbol);
	}
}
